#define _CRT_SECURE_NO_WARNINGS 1


#include <stdio.h>
#include <math.h>//sqrt是一个属于math.h中的库函数


// 设计flag变量实现情况的分类1
// 外层循环遍历全部奇数，内层循环进行判断
// 如果循环过程中满足条件，立即跳出内层循环，
// flag变量置为1
//用到任何一个不是自己写的函数时，要去做以下几件事
//1、查这个函数的参数即返回值数据类型,以确定赋值或比较时不出现类型不匹配
//2、先声明这个函数所在的库函数
//或者用以下程序
// int main()
// {
// 	int i = 0;
// 	int flag = 1;
// 	for ( i = 101; i <= 199; i+=2)
// 	{
// 		int j = 0;
// 		for ( j = 3; j <= sqrt(i); j++)
// 		{
// 			if (i % j == 0)
// 			{
// 				flag = 0;
// 				break;
// 			}
// 			else
// 			{
// 				flag = 1;
// 			}
// 		}
// 		if (flag)
// 		{
// 			printf("%d是素数\n", i);
// 		}
// 	}
	
// 	return 0;
// }


//int main()
//{
//    int year = 0;//
//    for (year = 1000; year <= 2000; year++)
//    {
//        if (year % 4 == 0)
//        {
//            if (year % 100 != 0)
//            {
//                printf("%d ", year);//
//            }
//        }
//        if (year % 400 == 0)//不能写成else if,因为当if的判断语句为真时，
//            //就不会进入else if的判断语句
//        {
//            printf("%d ", year);//
//        }
//    }//以上for循环中的循环体代码也可以简化为
//     //if (((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0))
//     //{
//     //   printf ("%d ", year);//
//     //}
//    return 0;//
//}
//判断一年是否是闰年的规则：1、当这一年能被4整除，且不能被100整除时，是闰年
//2、当这一年能被400整除时，是闰年


//形参和实参的名字可以相同，可以不同
//但对应位置的数据类型必须相同int arr []表示的是拿到了整个数组首元素的地址，
//而函数的参数为数组名时，就是拿到了一个指针变量，该指针变量指向了数组首元素
//形参、实参都是指针变量，其数据类型的长度都是8位十六进制数(32位平台)
//这种除法总是向下取整，但为了防止发生位溢出
//可以将这句改写成 int mid = left + (right - left) / 2;
//但不能写成int mid = left / 2 + right / 2;
size_t binaryResearch(int* arr, int n, size_t len)
{
	size_t left = 0;
	size_t right = len - 1;
	int i = 0;
	while (left <= right)
	{
		size_t mid = left + (right - left) / 2;
		if (arr[mid] < n)
		{
			left = mid + 1;
		}
		else if (arr[mid] > n)
		{
			right = mid - 1;
		}
		else
		{
			return mid;
		}
	}
	return 0;
	
}
int main()
{
	int num = 0;
	int count = 0;
	while (scanf("%d", &num) == 1)
	{	
		printf("请输入一个新的整数\n");
		int arr[] = { 1, 2, 3, 7, 8, 10 };
		size_t sz = sizeof(arr) / sizeof(arr[0]);
		size_t r = binaryResearch(arr, num, sz);
		if (r != 0)
		{
			printf("输入的元素在数组中，下标是：%zd\n", r);
		}
		else
		{
			printf("输入的元素不在数组中\n");
		}
		count++;
		if (count > 5)
		{
			return 0;
		}
	}
}

//void Add(int* p)
//{
//    (*p)++;//
//}
//
//int main()
//{
//    int num = 0;//
//    int* p = &num;
//    Add(p);//
//    printf("%d\n", num);//
//    Add(p);//
//    printf("%d\n", num);//
//    return 0;//
//}//程序的结果是1 2

 //也可以使用下面的程序
//int Add(int n)
//{
//    return ++n;//必须写成返回++n，因为++的优先级低，除非写在前面
//    //这样先执行n+1，返回的是+1后的值
//}
//
//int main()
//{
//    int num = 0;//
//    num = Add(num);//
//    printf("%d\n", num);//
//    num = Add(num);//
//    printf("%d\n", num);//
//    return 0;//
//}

//int main()
//{
//	printf("%d", printf("%d", printf("%d", 43)));
//printf的返回值是这次在屏幕上
//打出的字符个数，这条语句先执行printf("%d", 43); 在屏幕上打出43
//43是两个字符，printf("%d", 43)的返回值是2，然后再执行printf("%d", 2);
//在屏幕上打出2，2是一个字符,printf("%d", 2);的返回值是1，	
//然后再执行printf("%d", 1); 最后在屏幕上打印出1
//	return 0;//
//}//这个程序运行的结果是4321


#include "add.h"
//只用包含自己定义的名叫add的头文件，而且""包括在内
//创建一个源文件，叫add.c，在该文件内部写名叫add的函数的定义
//int Add(int x, int y)
//{
//	return x + y;
//}
//
//int main()
//{
//	int a = 0;//
//	int b = 0;//
//	scanf("%d %d", &a, &b);//
//	int sum = Add(a, b);
//	printf("%d\n", sum);
//	return 0;//
//}